home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Multimedia / MIDI / MidiChaos_15 Folder / MidiChaos_1.5 / Source / Tools / ctrl_fader next >
Text File  |  1991-01-31  |  4KB  |  173 lines

  1. \ Fader control class.
  2. \ Useful for on screen mixers or other continuous controllers.
  3. \
  4. \ Author: Phil Burk
  5. \ Copyright Phil Burk 1989
  6. \
  7. \ MOD: PLB 6/14/90  Moved Fader numeric display down 2 pixels
  8. \ MOD: PLB 1/28/91  Shrank Fader range for better updating,
  9. \            PUT.VALUE: now updates display if drawn.
  10.  
  11. ANEW TASK-CTRL_FADER
  12.  
  13. METHOD PUT.KNOB.SIZE:
  14. METHOD GET.KNOB.SIZE:
  15. METHOD IF.SHOW.VALUE:
  16.  
  17. :CLASS OB.FADER <SUPER OB.CONTROL
  18.     iv.short IV-CG-YOFF
  19.     iv.short IV-CG-KNOB-SIZE
  20.     iv.short IV-CG-KNOB-Y
  21.     iv.short IV-CG-SHOWV?
  22.  
  23. :M INIT:
  24.     init: super
  25.     10 iv=> iv-cg-knob-size
  26.     true iv=> iv-cg-showv?
  27. ;M
  28.  
  29. :M PUT.KNOB.SIZE: ( size -- , set in world coordinates )
  30.     0 swap scg.delta.wc->dc 1 max
  31.     iv=> iv-cg-knob-size drop
  32. ;M
  33.  
  34. :M GET.KNOB.SIZE: ( -- size )
  35.     iv-cg-knob-size
  36.     0 swap scg.delta.dc->wc
  37. ;M
  38.  
  39. :M IF.SHOW.VALUE:  ( flag -- )
  40.     iv=> iv-cg-showv?
  41. ;M
  42.  
  43. : CG.FADER.VAL>Y   ( value -- y , y for top of knob )
  44.     iv-cg-min -
  45.     iv-cg-height iv-cg-knob-size - 2-
  46.     iv-cg-max iv-cg-min - 
  47.     ?dup 0=         \ make 0/ impossible
  48.     IF 1
  49.     THEN */
  50.     iv-cg-topy iv-cg-height + iv-cg-knob-size - 1- swap -
  51. ;
  52.  
  53. : CG.FADER.Y>VAL   ( y -- val )
  54.     iv-cg-topy iv-cg-height + iv-cg-knob-size - 1- swap -
  55.     iv-cg-max iv-cg-min -
  56.     iv-cg-height iv-cg-knob-size - 2- 
  57.     ?dup 0=         \ make 0/ impossible
  58.     IF 1
  59.     THEN */
  60.     iv-cg-min + cg.clip.value
  61. ;
  62.  
  63. : CG.KNOB.AT.Y  ( y -- )
  64.     dup iv=> iv-cg-knob-y
  65.     iv-cg-leftx 2+ swap
  66.     iv-cg-leftx iv-cg-width + 2- over iv-cg-knob-size +
  67.     gr.rect
  68. ;
  69.  
  70. : CG.FADER.KNOB  ( -- , draw knob of fader )
  71.     iv-cg-value cg.fader.val>y ( y position of knob )
  72.     cg.knob.at.y
  73. ;
  74.  
  75. : CG.FADER.VALUE ( -- , display value of fader )
  76.     iv-cg-showv?
  77.     IF  iv-cg-topy iv-cg-height + 14 +
  78.         iv-cg-leftx iv-cg-width 2/ +  ( middle )
  79.         iv-cg-value n>text gr.textlen 2/ -
  80.         swap gr.move iv-cg-value gr.number
  81.     THEN
  82. ;
  83.  
  84. :M DRAW: ( -- )
  85.     draw: super
  86.     cg.draw.box
  87.     cg.fader.knob
  88.     cg.fader.value
  89. ;M
  90.  
  91. :M PUT.VALUE: ( value part -- , set value , update display )
  92.     ?drawn: self
  93.     IF    0 gr.color!
  94.         iv-cg-knob-y cg.knob.at.y
  95.         cg.fader.value
  96.     THEN
  97.     put.value: super
  98.     ?drawn: self
  99.     IF    1 gr.color!
  100.         cg.fader.knob
  101.         cg.fader.value
  102.     THEN
  103. ;M
  104.  
  105. :M PUT.TITLE:  ( $title -- , SET control title )
  106.     iv=> iv-cg-title
  107.     ?drawn: self
  108.     IF 
  109.         get.title: self   ?dup
  110.          IF
  111.             iv-cg-text-size gr.height! 1 gr.color!
  112.             iv-cg-text-font gr.font!
  113.              iv-cg-leftx iv-cg-topy  3 -
  114.              rot gr.xytext
  115.          THEN
  116.     THEN
  117. ;M
  118.  
  119. :M ?HIT:  ( mx my -- true_if_hit )
  120.     swap iv-cg-leftx dup iv-cg-width + 1- within?
  121.     IF dup iv-cg-topy dup iv-cg-height + 1- within?
  122.        IF  ( -- y )
  123.            0 get.value: self cg.fader.val>y 2dup <
  124.            IF 2drop 0
  125.            ELSE dup iv-cg-knob-size + within?
  126.                IF 1
  127.                ELSE 2
  128.                THEN
  129.            THEN  iv=> iv-cg-lasthit true
  130.        ELSE drop false
  131.        THEN
  132.     ELSE drop false
  133.     THEN
  134. ;M
  135.  
  136. :M EXEC.DOWN: ( -- )
  137.     iv-cg-lasthit
  138.     CASE
  139.     1 OF  ev.track.on
  140.           cg-first-my @ iv-cg-value cg.fader.val>y -
  141.           iv=> iv-cg-yoff
  142.       ENDOF
  143.     0 OF iv-cg-value get.increment: self +
  144.          0 self put.value: []
  145.       ENDOF
  146.     2 OF iv-cg-value get.increment: self -
  147.          0 self put.value: []
  148.       ENDOF
  149.     ENDCASE
  150. ;M
  151.  
  152. :M MOUSE.MOVE: ( x y -- )
  153.     nip    3 gr.color!
  154.     iv-cg-yoff - cg.fader.y>val
  155.     0 get.value: self over =
  156.     IF drop
  157.     ELSE 0 self put.value: []
  158.         iv-cg-move-cfa self execute: []
  159.     THEN
  160. ;M
  161.  
  162. :M MOUSE.UP:  ( x y )
  163.     mouse.up: super
  164.     iv-cg-lasthit 1 =
  165.     IF  ev.track.off
  166.     THEN
  167.     self draw: []
  168. ;M
  169.  
  170. ;CLASS
  171.  
  172.     
  173.